Software testing can be viewed as the process of validating and verifying that a software program, application or product meets its business and technical requirements, executes as expected and can be implemented. Different software development models focus the test effort at different points in the development process.
Software can be tested using a number of different methods including code coverage, manual and automated testing, and scenario and feature testing. User interfaces are particularly problematic to test. Testing user interfaces is particularly difficult because of the potential range of use of each user interface element and because of the necessity of dealing with sequences. Even a small program such as Microsoft® WordPad has at least 325 possible user interface operations. In a large program, the number of operations to be tested can easily become unwieldy.
Another problem associated with testing user interfaces involves sequencing. Certain functionalities of the system may only be invoked by initiating a complex sequence of user interface events. For example, to open a file in Microsoft® Word, a user may have to click on the File Menu, select the Open operation, use a dialog box to specify the file name, and then focus the application on the newly opened window. Clearly, increasing the number of possible operations increases the sequencing problem exponentially. In addition, rich user interfaces can be re-arranged into a variety of views or modes further complicating the testing matrix.